package com.example.MyThread.ThreadTest03;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @author Jason
 * @PACKAGE_NAME com.example.MyThread.ThreadTest03
 * @Description 第三种方式
 * @date 2023-12-10 19:04
 */
public class ThreadDemo {
    /**
     * 特点：可以获取到多线程的运行结果
     * 1. 创建一个类MyCallable实现Callable接口
     * 2. 重写call（有返回值，表示多线程运行结果）
     * 3. 创建 MyCallable 对象（表示多线程要执行的任务）
     * 4. 创建FutureTask的对象（作用管理多线程运行的结果）
     * 5. 创建Thread类的对象，并启动（表示线程）
     */
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        //创建 MyCallable 对象（表示多线程要执行的任务）
        MyCallable mc = new MyCallable();

        //创建FutureTask的对象（作用管理多线程运行的结果）
        FutureTask<Integer> ift = new FutureTask<>(mc);

        //创建线程
        Thread t1 = new Thread(ift);

        //启动线程
        t1.start();

        //获取多线程运行结果
        Integer i = ift.get();
        System.out.println("结果： " + i);

    }
}
